"use strict";
/*
 * @Author: quit
 * @Date: 2023-03-10 16:10:03
 * @LastEditTime: 2023-03-10 18:00:28
 * @Descripttion: 继承 extends
 * 面向对象的三大特性 (封装 继承 多态) 使用继承来扩展现有的类
 * 基类 父类 超类 是指被继承的类; 派生类 子类 指继承与基类的类
 * TS 规定主要派生类里定义了 constructor 函数,就必须在使用this前,在constructor函数里面调用super方法
 * - es5 的继承(借用构造函数和原型对象),实质是先创造子类的实例对象this,在将父类的方法添加到this上面(Parent.apply(this))
 * - es6 的继承机制发生了变化,先将父类实例对象的属性和方法添加到this(先通过父类的构造函数完成塑造super),然后再用子类的构造函数进行加工
 * 子类方法名与父类命名相同时表示重写父类方法
 * @notice:
 */
Object.defineProperty(exports, "__esModule", { value: true });
class Animal {
    constructor() {
        this.color = 'grey';
    }
    move(distance) {
        return console.log(`移动了${distance}米`);
    }
}
class Dog extends Animal {
    constructor() {
        // 在派生类中,使用了constructor,那就需要调用super()（本质就是调用super来从父类中继承并构建）
        super();
        console.log('派生类');
    }
    move() {
        return console.log(`重写了父类的方法`);
    }
}
let v1 = new Dog();
console.log(v1);
console.log(v1.color);
// console.log(v1.move(5));
console.log(v1.move());
